package controller

import (
	"github.com/kataras/iris/v12"
	"github.com/spf13/cast"
	"wit-admin-go/business/dto"
	"wit-admin-go/business/service"
	"wit-admin-go/system/app/controller"
	sysDto "wit-admin-go/system/app/dto"
	"wit-admin-go/system/utils"
	log "wit-admin-go/system/zaplogger"
)

type TestController struct{}

var Test = new(TestController)

// GetTestById
//
//	@Tags		test
//	@Summary	通过id获取测试信息
//	@accept		x-www-form-urlencoded
//	@Produce	x-www-form-urlencoded
//	@Param		id	query	string	true	"test id"
//	@Success	200
//	@Router		/test/getTestById [get]
//
// @Security ApiKeyAuth
func (us *TestController) GetTestById(ctx iris.Context) {
	res := new(sysDto.Result)
	id := ctx.URLParam("id")
	if id == "" {
		_ = ctx.JSON(sysDto.NewResult(nil, iris.StatusBadRequest, "缺少参数id"))
		return
	}

	test, err := service.TestService.GetTestById(id)
	if err != nil {
		res.Code = iris.StatusNotFound
		res.Msg = "数据没找到"
	} else {
		res.Code = iris.StatusOK
		res.Data = test
		res.Msg = "请求成功"
	}
	_ = ctx.JSON(res)
}

// CreateTest  添加测试
//
//	@Summary		添加测试
//	@Description	添加测试
//	@Tags			test
//	@Accept			x-www-form-urlencoded
//	@Produce		x-www-form-urlencoded
//	@Param			name		query	string	true	"测试名"
//	@Param			sole		query	string	false	"测试标识"
//	@Param			memo		query	string	false	"备注"
//	@Success		200
//	@Router			/test/createTest [post]
//
// @Security ApiKeyAuth
func (us *TestController) CreateTest(ctx iris.Context) {
	res := new(sysDto.Result)
	test := new(dto.Test)
	test.Id = utils.GetUid()
	test.CreateId = controller.GetUser(ctx).Id
	err := ctx.ReadForm(test)
	if err != nil {
		log.Log.Error(cast.ToString(err))
		res.Code = iris.StatusBadRequest
		res.Msg = cast.ToString(err)
		_ = ctx.JSON(res)
		return
	}
	err = service.TestService.PostCreateTest(*test)
	if err != nil {
		res.Code = iris.StatusInternalServerError
		res.Msg = err.Error()
	} else {
		res.Code = iris.StatusOK
		res.Msg = "创建成功"
	}
	_ = ctx.JSON(res)
}

// UpdateTest  修改测试
//
//	@Summary		修改测试
//	@Description	修改测试
//	@Tags			test
//	@Accept			x-www-form-urlencoded
//	@Produce		x-www-form-urlencoded
//	@Param			id			query	string	true	"ID"
//	@Param			name		query	string	false	"测试名"
//	@Success		200
//	@Router			/test/updateTest [put]
//
// @Security ApiKeyAuth
func (us *TestController) UpdateTest(ctx iris.Context) {
	res := new(sysDto.Result)
	test := new(dto.Test)
	test.UpdateId = controller.GetUser(ctx).Id
	err := ctx.ReadForm(test)
	if err != nil {
		log.Log.Error(cast.ToString(err))
		res.Code = iris.StatusBadRequest
		res.Msg = cast.ToString(err)
		_ = ctx.JSON(res)
		return
	}
	err = service.TestService.PutUpdateTest(*test)
	if err != nil {
		res.Code = iris.StatusNotFound
		res.Msg = err.Error()
	} else {
		res.Code = iris.StatusOK
		res.Msg = "修改成功"
	}
	_ = ctx.JSON(res)
}

// GetList 获取所有测试
//
//	@Summary		获取测试信息
//	@Description	获取测试信息
//	@Tags			test
//	@Param			pageNum		query	int		false	"页码"
//	@Param			pageSize	query	int		false	"每页数"
//	@Param			name		query	string	false	"测试名"
//	@Accept			x-www-form-urlencoded
//	@Produce		x-www-form-urlencoded
//	@Success		200
//	@Router			/test/getTestList [get]
//
// @Security ApiKeyAuth
func (us *TestController) GetList(ctx iris.Context) {
	res := new(sysDto.Result)
	page := new(dto.TestPage)
	if err := ctx.ReadForm(page); err != nil {
		res.Code = iris.StatusBadRequest
		res.Msg = "参数错误"
		_ = ctx.JSON(res)
		return
	}
	test, total := service.TestService.GetTestList(page)
	res.Data = test
	res.Msg = "请求成功"
	res.Code = iris.StatusOK
	// Header返回总条数
	utils.SetTotal(ctx, total)
	_ = ctx.JSON(res)
}

// DeleteTest 删除测试
//
//	@Summary		删除测试
//	@Description	删除测试
//	@Tags			test
//	@Accept			x-www-form-urlencoded
//	@Produce		x-www-form-urlencoded
//	@Param			id	query	string	true	"test id"
//	@Success		200
//	@Router			/test/deleteTest [delete]
//
// @Security ApiKeyAuth
func (us *TestController) DeleteTest(ctx iris.Context) {
	res := new(sysDto.Result)
	id := ctx.URLParam("id")
	if id == "" {
		_ = ctx.JSON(sysDto.NewResult(nil, iris.StatusBadRequest, "缺少参数id"))
		return
	}
	err := service.TestService.DelTest(id, controller.GetUser(ctx).Id)
	if err != nil {
		res.Code = iris.StatusNotFound
		res.Msg = err.Error()
	} else {
		res.Code = iris.StatusOK
		res.Msg = "删除成功"
	}
	_ = ctx.JSON(res)
}

// RemoveTest 永久删除测试
//
//	@Summary		永久删除测试
//	@Description	永久删除测试
//	@Tags			test
//	@Accept			x-www-form-urlencoded
//	@Produce		x-www-form-urlencoded
//	@Param			id	query	string	true	"test id"
//	@Success		200
//	@Router			/test/removeTest [delete]
//
// @Security ApiKeyAuth
func (us *TestController) RemoveTest(ctx iris.Context) {
	res := new(sysDto.Result)
	id := ctx.URLParam("id")
	if id == "" {
		_ = ctx.JSON(sysDto.NewResult(nil, iris.StatusBadRequest, "缺少参数id"))
		return
	}

	err := service.TestService.RemoveTest(id)
	if err != nil {
		res.Code = iris.StatusNotFound
		res.Msg = err.Error()
	} else {
		res.Code = iris.StatusOK
		res.Msg = "删除成功"
	}
	_ = ctx.JSON(res)
}
